<?php

/**
 * Notificacion filter form.
 *
 * @package    Sanitas
 * @subpackage filter
 * @author     Jose Antonio Sánchez Bedoya
 * @version    SVN: $Id: sfDoctrineFormFilterTemplate.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class NotificacionFormFilter extends BaseNotificacionFormFilter
{
  // Variable para controlar cuando utilizo el autocomplete para el nombre y cuando no
  protected $con_id = false;
    
  public function configure()
  {
      $this->disableLocalCSRFProtection();
      //following code will remove fields from form
      unset($this->widgetSchema['created_at']);
      unset($this->widgetSchema['updated_at']);
      unset($this->widgetSchema['validated_at']);
      unset($this->widgetSchema['is_validated']);
      unset($this->widgetSchema['removed_at']);
      unset($this->widgetSchema['remove_it']);
      
      $this->setWidget('texto', new sfWidgetFormFilterInput(array('with_empty' => false)));
      
      // Para añadir el nombre del cliente_id          
      $this->validatorSchema->setOption('allow_extra_fields', true);
      $this->setWidget('contacto_id',new sfWidgetFormFilterInput(array('with_empty' => false)));
      $this->setWidget('cliente_nombre', new sfWidgetFormInputText(array(), array('class' => 'lectura', 'size'=>'35px')));
  
      
      $idiomas = sfconfig::get('app_idiomas_list');
      array_unshift($idiomas, "");
      $this->setWidget('idioma', new sfWidgetFormChoice(array(
                                            'choices' => $idiomas,
                                      )));     
      $this->setWidget('dni', new sfWidgetFormFilterInput(array('with_empty' => false)));

      // Rango de fechas creacion
      $from_date = new sfWidgetFormJQueryDate(array('culture' => sfContext::getInstance()->getUser()->getCulture(),'image' => '/images/calendar.gif',));
      $from_date->getOption('date_widget')->setOption('format', '%day%/%month%/%year%');
      $to_date = new sfWidgetFormJQueryDate(array('culture' => sfContext::getInstance()->getUser()->getCulture(),'image' => '/images/calendar.gif',));
      $to_date->getOption('date_widget')->setOption('format', '%day%/%month%/%year%');
      $this->widgetSchema['fecha_creacion'] = new sfWidgetFormFilterDate(array(
  			'from_date' => $from_date, 
  			'to_date' => $to_date, 
  			'with_empty' => false,
  	));
      // Rango de fechas lanzamiento
      $from_date1 = new sfWidgetFormJQueryDate(array('culture' => sfContext::getInstance()->getUser()->getCulture(),'image' => '/images/calendar.gif',));
      $from_date1->getOption('date_widget')->setOption('format', '%day%/%month%/%year%');
      $to_date1 = new sfWidgetFormJQueryDate(array('culture' => sfContext::getInstance()->getUser()->getCulture(),'image' => '/images/calendar.gif',));
      $to_date1->getOption('date_widget')->setOption('format', '%day%/%month%/%year%');
      $this->widgetSchema['fecha_lanzamiento'] = new sfWidgetFormFilterDate(array(
  			'from_date' => $from_date1, 
  			'to_date' => $to_date1, 
  			'with_empty' => false,
  	));
            
      // Definicion de Validadores
      $this->setValidator('contacto_id', new sfValidatorPass(array('required' => false)));
      $this->setValidator('cliente_nombre', new sfValidatorPass(array('required' => false)));
      $this->setValidator('idioma', new sfValidatorPass(array('required' => false)));
      $this->setValidator('dni', new sfValidatorPass(array('required' => false)));
  }
  
  public function addDniColumnQuery(Doctrine_Query $query, $field, $values)
  {
    if (!is_array($values))
    {
      $values = array($values);
    }

    if (!count($values))
    {
      return;
    }
    
    //Para evitar que haga consultas si el campo DNI está vacío
    if (($values['text'] == ''))
    {
      return;
    }
    
    $q = "%" . $values['text'] . "%";
    $query
      ->innerJoin($query->getRootAlias().'.Contacto c')
      ->andWhere('c.num_documento LIKE ?', $q);    
  }
  
  public function addIdiomaColumnQuery(Doctrine_Query $query, $field, $values)
  {
    if (!is_array($values))
    {
      $values = array($values);
    }

    if (!count($values))
    {
      return;
    }
    
    if (strcmp($values[0], '0')==0) {
        return;
    }
    
    $q = $values[0]; //[0] en lugar de ['text'] porque es de tipo choices    
    $query
      ->innerJoin($query->getRootAlias().'.Contacto c2')
      ->andWhere('c2.idioma = ?', $q);      
  }
  
  public function addClienteNombreColumnQuery(Doctrine_Query $query, $field, $values)
  {
    if (!is_array($values))
    {
      $values = array($values);
    }

    if (!count($values))
    {
      return;
    }
    // Si el nombre no lo he creado con autocomplete, lo busco por nombre o apellido
    // Si el id está relleno, lo buscaré por id y por tanto no crearé la sentencia SQL para el nombre y apellidos.
    if (!$this->con_id){
        $q = "%" . $values[0] . "%";
        $query
        ->innerJoin($query->getRootAlias().'.Contacto c3')
        ->andWhere('c3.nombre LIKE ? OR c3.primer_apellido LIKE ? OR c3.segundo_apellido LIKE ?', array($q, $q, $q));    
    }    
  }
  
  public function addContactoIdColumnQuery(Doctrine_Query $query, $field, $values)  
  { // Si he rellenado el autocomplete, busco el contacto por su id y cambio la variable con_id a true   
    if ($values['text'] != '') {        
        $q = $values['text'];
        $query->andWhere('r.contacto_id = ?', $q); 
        $this->con_id = true;
    }  
  }
  
  public function getFields()
  {
      $fields = array(
        'id'                => 'Number',
        'asunto'            => 'Text',
        'texto'             => 'Text',
        'fecha_creacion'    => 'Date',
        'fecha_lanzamiento' => 'Date',
        'contacto_id'       => 'ForeignKey',
        'adjunto1'          => 'Text',
        'adjunto_original1' => 'Text',
        'adjunto2'          => 'Text',
        'adjunto_original2' => 'Text',
        'created_at'        => 'Date',
        'updated_at'        => 'Date',
        'validated_at'      => 'Date',
        'is_validated'      => 'Boolean',
        'removed_at'        => 'Date',
        'remove_it'         => 'Boolean',
      );
      //Añado los campos extras por los que voy a filtrar, no sé muy bien si hacen algo estás líneas de debajo
      //pero las dejo tal y como se indica en http://stackoverflow.com/questions/5461703/symfony-admin-filter-with-join
      $fields['dni'] = 'dni';      
      $fields['cliente_nombre'] = 'cliente_nombre';
      return $fields;
  }
}
